package com.study.studyInstance;

public class TestStaticInnerClass {
    public static void main(String[] args) {
        X x = new X();
        X.Z z = x.new Z();
        z.showZ(x);
        System.out.println("________________________");
        //静态内部类创建方式
        X.Y y = new X.Y();
        y.useShow(x);
        X.Y.wuhu();
    }
}
class X{
    static String message = "X的message";
    boolean isTrue = true;
    public static void show(){
        System.out.println("X的静态方法");
    }
    public void non_static(){
        System.out.println("x的非静态方法");
    }
    public static class Y{
        static int a = 1;
        double b = 23.34;
        public void useShow(X x){
            //静态内部类不能调用外部类的非静态属性 原因：静态内部类Y随着包含main方法的主类加载而加载，调用Y类中的非静态方法，需要创建Y类对象，
            //由于在Y类加载前，外部类X根本没有加载，X类的非静态属性并不存在，所以无法调到。
            //System.out.println(isTrue);
            //调用外部类的静态、非静态方法
            X.show();
            x.non_static();
        }
        public static void wuhu(){
            System.out.println("静态内部类y的静态方法");
        }
    }
    public class Z{
        public void showZ(X x){
            //非静态内部类可以调用外部类的静态、非静态变量
            System.out.println(isTrue);
            System.out.println(message);
            //非静态内部类可以调用外部类的静态、非静态方法
            X.show();
            x.non_static();
        }
    }
}